package avicit.bdp.dgs.mdm.service;

import avicit.bdp.common.base.BaseService;
import avicit.bdp.dgs.mdm.dao.MdmLogDAO;
import avicit.bdp.dgs.mdm.dto.MdmLogDTO;
import avicit.bdp.dgs.mdm.dto.MdmMetricDTO;
import avicit.platform6.commons.utils.StringUtils;
import org.apache.ibatis.annotations.Param;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @金航数码科技有限责任公司
 * @作者：developer
 * @邮箱：developer@avic-digital.com
 * @创建时间： 2023-12-14
 * @类说明：MdmLogService
 * @修改记录：
 * @注意事项：
 * @主要功能：主数据审计日志Service
 */
@Service
public class MdmLogService extends BaseService<MdmLogDAO, MdmLogDTO> {
    private static final Logger logger = LoggerFactory.getLogger(MdmLogService.class);

    /**
     * 新增审计日志
     *
     * @param tableId
     * @param dataId
     * @param status
     * @param distribute
     */
    public void addLog(String tableId, String dataId, Integer status, Integer distribute) {
        if (StringUtils.isEmpty(tableId)) {
            logger.warn("数据ID为空");
            return;
        }

        MdmLogDTO logDTO = new MdmLogDTO();
        logDTO.setId(dataId);
        logDTO.setTableId(tableId);
        logDTO.setDataId(dataId);
        logDTO.setStatus(status);
        logDTO.setDistribute(distribute);

        this.insertSelective(logDTO);
    }

    /**
     * 删除审计日志
     *
     * @param dataId
     */
    public void deleteLog(String dataId) {

        if (StringUtils.isEmpty(dataId)) {
            logger.warn("数据ID为空");
            return;
        }

        this.mapper.deleteLogByCond(dataId);
    }

    /**
     * 更新审计日志
     *
     * @param tableId
     * @param dataId
     * @param status
     * @param distribute
     */
    public void updateLog(String tableId, String dataId, Integer status, Integer distribute) {
        if (StringUtils.isEmpty(dataId)) {
            logger.warn("数据ID为空");
            return;
        }

        MdmLogDTO logDTO = new MdmLogDTO();
        logDTO.setId(dataId);
        logDTO.setTableId(tableId);
        logDTO.setDataId(dataId);
        logDTO.setStatus(status);
        logDTO.setDistribute(distribute);

        this.updateByPrimaryKeySelective(logDTO);
    }

    /**
     * 统计数据总量
     *
     * @return
     */
    public long countData() {
        return this.mapper.countData();
    }

    /**
     * 统计已分发数据总量
     *
     * @return
     */
    public long countDistributedData() {
        return this.mapper.countDistributedData();
    }

    /**
     * 根据状态统计数据总量
     *
     * @return
     */
    public List<MdmMetricDTO> countDataByStatus() {
        return this.mapper.countDataByStatus();
    }

    /**
     * 查看近24h新增数据量
     *
     * @param condList 查询条件，{[startTime,endTime]...}
     * @return
     */
    public List<MdmMetricDTO> getLast24hAddData(@Param("condList") List<MdmMetricDTO> condList) {
        return this.mapper.countLast24hAddData(condList);
    }

    /**
     * 查看近7天新增数据量
     *
     * @return
     */
    public List<MdmMetricDTO> getLast7DaysAddData() {
        return this.mapper.countLast7DaysAddData();
    }

    /**
     * 查看近30天新增数据量
     *
     * @return
     */
    public List<MdmMetricDTO> getLast30DaysAddData() {
        return this.mapper.countLast30DaysAddData();
    }
}
